package com.spotify.analysis.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.spotify.analysis.dto.TrackRequestParam;
import com.spotify.analysis.entity.Track;

import java.util.List;
import java.util.Map;

public interface TrackService extends IService<Track> {
    
    /**
     * 获取歌曲列表（支持分页和条件查询）
     * @param param 查询参数
     * @return 分页结果
     */
    IPage<Track> getTracks(TrackRequestParam param);
    
    /**
     * 根据ID获取歌曲详情
     * @param id 歌曲ID
     * @return 歌曲信息
     */
    Track getTrackById(String id);
    
    /**
     * 获取所有流派列表
     * @return 流派列表
     */
    Map<String, Object> getGenres();
    
    /**
     * 获取所有调式列表
     * @return 调式列表
     */
    Map<String, Object> getKeys();

    /**
     * 获取调式分布统计
     * @param param 查询参数
     * @return 调式分布统计结果
     */
    Map<String, Object> getKeyDistribution(TrackRequestParam param);

    /**
     * 获取流派分布统计
     * @param param 查询参数
     * @return 流派分布统计结果
     */
    Map<String, Object> getGenreDistribution(TrackRequestParam param);
    
    /**
     * 获取活跃度分布统计
     * @param param 查询参数
     * @return 活跃度分布统计结果
     */
    Map<String, Object> getEnergyDistribution(TrackRequestParam param);
    
    /**
     * 获取舞曲程度分布统计
     * @param param 查询参数
     * @return 舞曲程度分布统计结果
     */
    Map<String, Object> getDanceabilityDistribution(TrackRequestParam param);
}